package com.shujia.spark

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Demo1WordCOunt {
  def main(args: Array[String]): Unit = {

    //spark 配置文件对象
    val conf = new SparkConf()

    //任务名
    conf.setAppName("wc")

    //指定spark 运行方法   local:本地运行(在单个JVM中运行)
    conf.setMaster("local")


    //创建spark 上下文对象, 是spar的入口
    val sc = new SparkContext(conf)

    /**
      *
      * RDD : 弹性的分布式数据集
      * 代码层面可以当成一个List集合使用
      *
      */

    while (true) {


      //1  读取文件
      val lines: RDD[String] = sc.textFile("spark/data/words.txt")


      //2\ 将单词拆分
      val words: RDD[String] = lines.flatMap(line => line.split(","))


      //3 在每一单词后面加1
      val kv: RDD[(String, Int)] = words.map(word => (word, 1))


      /**
        * reduceByKey: 对每一个key所有的value进行聚合操作
        *
        */


      //4 统计单词的数量
      val count: RDD[(String, Int)] = kv.reduceByKey((x, y) => x + y)


      //5 整理数据
      val result: RDD[String] = count.map(kv => s"${kv._1}\t${kv._2}")



      //6 保存结果
      result.saveAsTextFile("spark/data/wc")


      Thread.sleep(1000)

    }

  }
}
